﻿using System;
using System.Collections.Generic;

namespace MQTTServer.Models
{
    /// <summary>
    /// 批量增加人员/批量修改人员
    /// </summary>
    public class AddOrEditPersons
    {
        /// <summary>
        ///  批量增加人员
        /// </summary>
        public string @operator { get; set; }

        /// <summary>
        /// 消息 id,区分每一条消
        /// </summary>
        public string messageId { get; set; }

        /// <summary>
        /// 数据包开始标识，检测数据包完整性
        /// </summary>
        public string DataBegin { get; set; }

        /// <summary>
        /// 数据包结束标识，检测数据包完整性
        /// </summary>
        public string DataEnd { get; set; }

        /// <summary>
        /// 人员数目,必须和对应人员信息 json 个 数一致
        /// </summary>
        public int PersonNum { get; set; }

        /// <summary>
        ///  List<AddPersonsInfo>
        /// </summary>
        public List<AddPersonsInfo> info { get; set; }
    }

    public class AddPersonsInfo
    {
        /// <summary>
        ///  平台生成的 id,唯一标识不同人员，建议使用身份证号，传入 customId设备已经存在视为修改，否则为增加
        /// </summary>
        public string customId { get; set; }

        /// <summary>
        ///  人员名字
        /// </summary>
        public string name { get; set; }

        /// <summary>
        ///  0: 白名单 1: 黑名单
        /// </summary>
        public PersonType personType { get; set; }

        /// <summary>
        ///  名单类型
        /// </summary>
        public TempCardType tempCardType { get; set; }

        /// <summary>
        ///  临时名单开始时间名单类型为临时名单 1 或 2 或 4 时必填
        /// </summary>
        public DateTime? cardValidBegin { get; set; }

        /// <summary>
        ///  临时名单结束时间名单类型为临时名单 1 或 2 或 4 时必填
        /// </summary>
        public DateTime? cardValidEnd { get; set; }

        /// <summary>
        ///  临时名单 3 或临时名单 4 的有效次数,名单类型为临时名单 3 或临时名单4 时必填
        /// </summary>
        public int? EffectNumber { get; set; }

        /// <summary>
        ///  民族
        /// </summary>
        public Nation? nation { get; set; }

        /// <summary>
        ///  性别
        /// </summary>
        public Gender? gender { get; set; }

        /// <summary>
        ///  证件号码
        /// </summary>
        public string? idCard { get; set; }

        /// <summary>
        ///  生日
        /// </summary>
        public DateTime? birthday { get; set; }

        /// <summary>
        ///  电话号码
        /// </summary>
        public string? telnum1 { get; set; }

        /// <summary>
        ///  籍贯
        /// </summary>
        public string? native { get; set; }

        /// <summary>
        ///  住址
        /// </summary>
        public string? address { get; set; }

        /// <summary>
        ///  备注
        /// </summary>
        public string? notes { get; set; }

        /// <summary>
        ///  韦根卡号生成方式(0: 公用卡号 1: 自动生成 2: 手动输入 3: 不使用门禁)
        /// </summary>
        public CardType2? cardType2 { get; set; }

        /// <summary>
        ///  组成韦根卡号根据的韦根协议;当 cardType2=2 必填； 0: 26 位 1: 34 位 6:26 位(8+16 facility code+userid(设备代码+卡号)分开填 写); 7:34 位(8+24 facility code+userid(设备代码+卡号)分开填 写) 默认:1(34 位)
        /// </summary>
        public WiegandType? WiegandType { get; set; }

        /// <summary>
        ///  设备代码(Facility code);当 WiegandType= 6 or 7 时必填; 和 cardNum2 一起使用。当 WiegandType=0 or 1 时,不必填
        /// </summary>
        public int? WGFacilityCode { get; set; }

        /// <summary>
        ///  韦根门禁卡号(userid) cardType2 为 2 时必填
        /// </summary>
        public int? cardNum2 { get; set; }

        /// <summary>
        ///  组成门禁卡号采用模式 0: 十进制构成卡号 1: 十六进制构成卡号 默认 0: 十进制构成卡号
        /// </summary>
        public CardMode? CardMode { get; set; }

        /// <summary>
        ///  组成 RF（ID）卡号采用模式， 针对内置刷卡机型 0: 十进制构成卡号 1: 十六进制构成卡号 默认 1: 十六进制构成卡号
        /// </summary>
        public RFCardMode? RFCardMode { get; set; }

        /// <summary>
        ///  ID 卡卡号，最大长度为 10 个字符 长度,针对内置刷卡机型（含结束 符），如果只是重新编辑名单，不 改变卡号，则不需要传入 RFIDCard 关键字
        /// 如果 RFCardMode=0， 填 入 十 进 制 字 符 串 (“1369406761”)；如 果 RFCardMode=1，填 入 十 六 进 制 字 符 串 (“519F7D29”)
        /// </summary>
        public int? RFIDCard { get; set; }

        /// <summary>
        ///  证件类型：0 身份证
        /// </summary>
        public CardType? cardType { get; set; }

        /// <summary>
        ///  人员图片（URI 地址），和 Pic 2 选 1
        /// </summary>
        public string picURI { get; set; }

        /// <summary>
        ///  检测添加的图片和底库的人员相似度， 大于设置的黑白名单验证门限值将添 加失败，用于排除相同人员图片被添加 多次。 0:不检测图片相似度(默认:0) 1：检测图片相似度
        /// </summary>
        public IsCheckSimilarity? isCheckSimilarity { get; set; }
    }
}